/************************************************************************
 * <br>
 * <ul>
 * <li>版权所有：唐山弘川科技有限公司 2009－2020</li>
 * <li>创建日期：2009-8-10</li>
 * <li>初始作者：刘川</li>
 * </ul>
 * <ul>
 * <b>修订历史</b>
 * <li>1、</li>
 * </ul>
 ***********************************************************************/
package com.hy.enterprise.framework.persistence.domain.query.conditions ;

import com.hy.enterprise.framework.persistence.domain.query.internal.managedobjects.LibraManagedObject;

/**
 * <ul>
 * <li>设计作者：刘川</li>
 * <li>设计日期：2009-8-10</li>
 * <li>设计时间：下午03:09:31</li>
 * <li>设计目的：</li>
 * </ul>
 * <ul>
 * <b>修订历史</b>
 * <li>1、</li>
 * </ul>
 */
public abstract class ConditionalExpression extends LibraManagedObject
{
	/**
	 * <ul>
	 * <li>设计作者：刘川</li>
	 * <li>设计日期：2009-8-10</li>
	 * <li>设计时间：下午03:10:12</li>
	 * <li>设计目的：</li>
	 * </ul>
	 * <ul>
	 * <b>修订历史</b>
	 * <li>1、</li>
	 * </ul>
	 */
	static enum Type
	                implements
	                IOperator
	{
		AND (
		     " AND " ) ,
		OR (
		    " OR " ) ;
		/**
		 * 
		 */
		private final String	stringForm ;

		/**
		 * 构造函数
		 * 
		 * @param stringForm
		 */
		private Type (
		               String stringForm )
		{
			this.stringForm =
			                  stringForm ;
		}

		/**
		 * @see com.hy.enterprise.framework.persistence.domain.query.conditions.IOperator#getStringRepresentation()
		 */
		public String getStringRepresentation ( )
		{
			return this.stringForm ;
		}
	}

	/**
	 * <ul>
	 * <li>设计作者：刘川</li>
	 * <li>设计日期：2009-8-10</li>
	 * <li>设计时间：下午03:10:43</li>
	 * <li>设计目的：</li>
	 * </ul>
	 * <ul>
	 * <b>修订历史</b>
	 * <li>1、</li>
	 * </ul>
	 * 
	 * @param conditionalExpression
	 * @return
	 */
	public ConditionalExpression and (
	                                   ConditionalExpression conditionalExpression )
	{
		return new BinaryExpression < ConditionalExpression , ConditionalExpression > (
		                                                                                this ,
		                                                                                Type.AND ,
		                                                                                conditionalExpression ) ;
	}

	/**
	 * <ul>
	 * <li>设计作者：刘川</li>
	 * <li>设计日期：2009-8-10</li>
	 * <li>设计时间：下午03:11:19</li>
	 * <li>设计目的：</li>
	 * </ul>
	 * <ul>
	 * <b>修订历史</b>
	 * <li>1、</li>
	 * </ul>
	 * 
	 * @param conditionalExpression
	 * @return
	 */
	public ConditionalExpression or (
	                                  ConditionalExpression conditionalExpression )
	{
		return new BinaryExpression < ConditionalExpression , ConditionalExpression > (
		                                                                                this ,
		                                                                                Type.OR ,
		                                                                                conditionalExpression ) ;
	}
}
